﻿Imports System.IO

Public Class GestionProductos
    Private _Productos As New List(Of Producto)
    Public ReadOnly Property Productos As ObjectModel.ReadOnlyCollection(Of Producto)
        Get
            Return _Productos.AsReadOnly
        End Get
    End Property
    Public Sub New()
        If Not Directory.Exists(My.Application.Info.DirectoryPath & "\Ficheros") Then
            Directory.CreateDirectory(My.Application.Info.DirectoryPath & "\Ficheros")
        End If
        Dim fich As StreamReader
        If File.Exists(My.Application.Info.DirectoryPath & "\Ficheros\" & "Productos.txt") Then
            Try
                fich = New StreamReader(My.Application.Info.DirectoryPath & "\Ficheros\" & "Productos.txt")
                Do Until fich.EndOfStream
                    Dim datos() As String
                    Dim Linea As String
                    Linea = fich.ReadLine
                    datos = Linea.Split("*")
                    If datos(0) = "0" Then
                        _Productos.Add(New Bebida(datos(0), datos(1), datos(2), datos(3), datos(4)))
                    End If
                    If datos(0) = "1" Then
                        _Productos.Add(New Comida(datos(0), datos(1), datos(2), datos(3), datos(4)))
                    End If
                    If datos(0) = "2" Then
                        _Productos.Add(New Complemento(datos(0), datos(1), datos(2), datos(3), datos(4)))
                    End If

                Loop
            Catch ex As Exception
                _Productos.Clear()
            Finally
                fich.Close()


            End Try
        Else
            Grabar()

        End If
    End Sub
    Public Function Eliminar(ByVal nombreProducto As Producto) As String
        If nombreProducto.Nombre Is Nothing Then
            Return "No se puede borrar"
        End If
        For i As Integer = 0 To _Productos.Count - 1
            If Productos(i).Nombre.ToLower = nombreProducto.Nombre.ToLower Then
                _Productos.RemoveAt(i)
                Grabar()
                Return ""
            End If
        Next
        Return "Error, no existe ese producto"
    End Function
    Public Function Añadir(ByVal nombreProducto As Producto) As String
        If nombreProducto.Nombre = "Error" Then
            Return "Nombre del producto no valido"
        End If
        If nombreProducto.Tipo <> Producto.tipoproducto.Bebida AndAlso nombreProducto.Tipo <> Producto.tipoproducto.Comida AndAlso nombreProducto.Tipo <> Producto.tipoproducto.Complemento Then
            Return "Tipo no valido"
        End If
        If nombreProducto.Precio = Nothing Then
            Return "Precio no valido"
        End If
        If nombreProducto.Tipo = Producto.tipoproducto.Bebida Then
            Dim prod As Bebida = nombreProducto
            _Productos.Add(nombreProducto)
        End If
        If nombreProducto.Tipo = Producto.tipoproducto.Comida Then
            Dim prod As Comida = nombreProducto
            _Productos.Add(nombreProducto)
        End If
        If nombreProducto.Tipo = Producto.tipoproducto.Complemento Then
            Dim prod As Complemento = nombreProducto
            _Productos.Add(nombreProducto)
        End If
        Grabar()
        Return ""
    End Function
    Public Function Modificar(ByVal antiguo As Producto, ByVal nuevo As Producto) As String
        For i As Integer = 0 To _Productos.Count - 1
            If _Productos(i).Equals(antiguo) Then
                If nuevo.Tipo = Producto.tipoproducto.Bebida Then
                    Dim nue As Bebida = nuevo
                    _Productos(i) = nue
                    Grabar()
                    Return ""

                End If
                If nuevo.Tipo = Producto.tipoproducto.Comida Then
                    Dim nue As Comida = nuevo
                    _Productos(i) = nue
                    Grabar()
                    Return ""

                End If
                If nuevo.Tipo = Producto.tipoproducto.Complemento Then
                    Dim nue As Complemento = nuevo
                    _Productos(i) = nue
                    Grabar()
                    Return ""
                End If
            End If
        Next
        Return "Error"
    End Function
    Private Function Grabar() As String
        Dim fichero As StreamWriter
        Try
            File.Delete(My.Application.Info.DirectoryPath & "\Ficheros\" & "Productos.txt")
            fichero = New StreamWriter(My.Application.Info.DirectoryPath & "\Ficheros\" & "Productos.txt")
            For i As Integer = 0 To _Productos.Count - 1
                fichero.WriteLine(_Productos(i).Tipo & "*" & _Productos(i).Nombre & "*" & _Productos(i).Precio & "*" & _Productos(i).Descripcion & "*" & _Productos(i).Foto)
            Next
        Catch ex As Exception
            fichero.Close()
            Return ex.Message
        End Try
        fichero.Close()
        Return ""
    End Function

End Class
